package org.example.uuadb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.security.oauth2.provider.token.store.jwk.JwkTokenStore;

import javax.sql.DataSource;

/**
 * @author : yurui
 * @date : 2024/6/1
 * @TIME : 19:34
 * @project : AuthDemo
 * token令牌管理
 */
@Configuration
public class TokenConfig {

    //内存的方式进行token的管理
//    @Bean
//    public TokenStore tokenStore(){
//        return new InMemoryTokenStore();
//    }


    //基于数据库的令牌存储管理
//    @Bean
//    public TokenStore tokenStoreJdbc(DataSource dataSource){
//        return new JdbcTokenStore(dataSource);
//    }

    //基于jwt的令牌
    //jwt令牌通过对token和用户的信息进行封装，并进行加密，从而实现令牌中带有权限信息，资源服务中进行解密即可判断登录的用户是否有对应的权限访问对应的资源
    //同时jwt令牌在权限服务中是不做存储的。
    //ApprovalStore: 用于存储不需要手动确认的scope用户，直接进行登录
    @Bean
    public TokenStore tokenStore(JwtAccessTokenConverter converter){
        return new JwtTokenStore(converter);
    }

    @Bean
    public JwtAccessTokenConverter converter(){
        return new JwtAccessTokenConverter();
    }
}
